package com.hc.demo_api820.controller;

import com.hc.demo_api820.domain.Orders;
import com.hc.demo_api820.dto.ResultResponse;
import com.hc.demo_api820.mapper.OrdersMapper;
import com.hc.demo_api820.service.OrdersService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.time.LocalDate;
import java.time.ZoneId;
import java.util.Date;

/**
 * 订单控制
* */

@RestController
public class OrdersController {
    @Autowired
    OrdersService ordersService;
    @Autowired
    private OrdersMapper ordersMapper;

    @RequestMapping("/cancelAppointment/{orderId}")
    public ResultResponse cancelAppointment(@PathVariable("orderId") Integer orderId){
        // 取消订单，就是订单删除
        return ordersService.cancelAppointment(orderId);
    }



    /**
     * 查询某个用户的订单，最后降序排序
     * mapper servie controller
     * */
    @RequestMapping("/queryOrderByUserId/{userId}")
    public ResultResponse queryOrderByUserId(@PathVariable("userId") String userId){
        System.out.println("queryOrderByUserId:userId:"+userId);
        return ordersService.queryOrderByUserId(userId);
    }

    /**
     * 创建订单的接口
     * 参数：Orders对象  （userId,hpId,orderDate,smId,state） 订单号没有，怎么办？MySQL数据库自动创建订单号
     * 返回什么呢? 返回成功，如果不成功抛出异常
     * 注意：原来的系统要求一个用户只能预约一次 ×  一个用户某个日期只能预约一次 √ 当前已无号 √
     *
     * 写代码的顺序，OrdersMapper--》OrdersService--》OrdersController
     * */


    @RequestMapping("/createOrders")  //后端接口白盒测试：正向测试 逆向测试
    public ResultResponse createOrders(@RequestBody Orders orders) {

//        return ordersService.careateOrders(orders);
        System.out.println("into createOrder..........................");
        //把日期处理一下，只保留年月日
        orders.setOrderDate(getDateOnly(orders.getOrderDate()));
        return ordersService.careateOrders(orders);
    }
    public Date getDateOnly(Date date) {
        // 转换为 LocalDate（只保留年月日）
        LocalDate localDate = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
        // 转回 Date（时间部分为 00:00:00）
        return Date.from(localDate.atStartOfDay(ZoneId.systemDefault()).toInstant());
    }
}
